package com.ndp.fb.rdb.api;

import com.ndp.fb.rdb.model.Pager;
import com.ndp.fb.rdb.model.customaudience.*;

import java.util.List;

/**
 * Created by elvisxiong on 15/12/8.
 */
public interface CustomAudienceTemplateRdbService {

    /**
     * 保存自定义受众模板
     *
     * @param template
     * @return
     */
    long save(CustomAudienceTemplate template);

    /**
     * 保存自定义受众模板与facebook应用编号关系
     * @param templateId
     * @param connectionObjectIdList
     * @return
     */
    List<Long> batchSaveCustomAudienceTemplateAppRelation(Long templateId,List<Long> connectionObjectIdList);

    /**
     * 根据自定义受众模板编号查询自定义受众模板下的应用编号列表
     * @param templateId
     * @return
     */
    List<CustomAudienceTemplateAndConnectionObject> getConnectionObjectIdByAudienceTemeplateId(Long templateId);

    /**
     * 根据自定义受众应用编号查询自定义受众模板
     * @param connectionObjectId
     * @return
     */
    List<CustomAudienceTemplateAndConnectionObject> getConnectionObjectByConnectionId(Long connectionObjectId);

    void batchDelCustomAudienceTemplFbConnObjByTmplId(List<Long> tmplIds);

    void batchDelCustomAudienceTemplFbConnObjByConnId(List<Long> connObjIds);


    /**
     * 更新自定义受众模板
     *
     * @param template
     */
    void update(CustomAudienceTemplate template);

    /**
     * 更新自定义受众  成功后的大概值
     */
    void updateApproximateCount(Long id, Long approximateCount);

    /**
     * 记录模板被人更新的时间
     */
    void updateOperationTime(Long id);


    /**
     * 获取全部自定义受众模板
     * @param orgId
     * @param audienceType
     * @param importedType
     * @return
     */
    List<CustomAudienceTemplateTable> getAllCustomAudienceTemplate(Long orgId,String audienceType,String importedType);

    /**
     * 根据创建用户ID分页查询自定义受众模版列表
     *
     * @param firstResult
     * @param sizeNo
     * @return
     */
    Pager<?> findPagerByUserId(Long orgId,String audienceType,String importedType, int firstResult, int sizeNo);

    /**
     * 根据自定义受众模板ID查询自定义受众模板
     * @param templateId
     * @return
     */
    CustomAudienceTemplate findById(String templateId);

    /**
     * 更新自定义受众模板
     *
     */
    void updateName(Long templateId, String name);

    /**
     * 删除模板
     */
    void delByIds(List<Long> ids,String delReason);

    /**
     * 根据广告账号查询自定义受众模板
     * @param accountId
     * @return
     */
    List<CustomAudienceTemplate> findCustomAudienceTemplateByAccountId(Long accountId);


    List<CustomAudienceTemplateAccountCount> findAllCustomAudienceTemplateIdAndAccountNum(String userId);

    List<CustomAudienceTemplateAccountCount> findAllCustomAudienceTemplateIdAnAvaliableAccountNum(String userId);

    List<CustomAudienceTemplateConnectionObjectName> findConnectionObjectNameByTempladteIds(List<Long> templateIdList);

    int getCustomAudienceItemCountByTemplateId(Long templateId);

    List<Long> getCustomAudienceTemplateId(Long fbUserId);

    void deleteCustomAudienceTemplate(Long fbUserId,String delReason);

    /**
     * 查找公司下所有可用自定义受众模板
     */
    List<CustomAudienceTemplate> findCanUseTmpl(Long orgId, String userId);

    CustomAudienceTemplate findCustomAudienceTemplateByoriginIdAndcountryCodeAndratio(Long originId, String countryCode, String ratio);

    Pager<CustomAudienceTemplateTable> findLookAlikePagerByUserIdAndName(Long orgId, String name, int firstResult, int sizeNo);

    List<Long> findHasLookALike(List<Long> ids);

    List<CustomAudienceTemplate> getCustomAudienceByOriginId(Long originId);

    List<CustomAudienceTemplateTable> findAllLookAlikeByUserIdAndName(Long orgId, String name);
}
